#pragma once
#include "generator.hpp"

template <typename T>
struct Const: Generator<T>
{
    typedef T ReturnType;
    Const(T value = T()): value_(value_) {}
    virtual T operator()() { return value_; }
private:
    T value_;
};

template <int VALUE>
struct IntConst
{
    typedef int ReturnType;
    int operator()() { return VALUE; }
};

template <typename T, T VALUE>
struct EnumConst
{
    typedef T ReturnType;
    T operator()() { return VALUE; }
};

template <int NUMERATOR, int DENOMINATOR>
struct FloatConst
{
    typedef float ReturnType;
    float operator()() { return 1.0 * NUMERATOR / DENOMINATOR; }
};
